home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Multimedia / Resource Library: Multimedia.iso / sgml / unix / sgmlh / source.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-03  |  6.2 KB  |  114 lines

  1. /******************************************************************************/
  2. /* SOURCE.H: Entity and source control block structures and definitions.
  3. */
  4. #define ENTHASH    29         /* Est. 100 entries in entity hash table (etab).*/
  5. #define RCCBUFSZ    8         /* Size of repeated character buffer. */
  6.  
  7. /* Entity storage class values for estore member of entity structure. */
  8. #define EST   1               /* String: Tag (usually a fixed STARTGI). */
  9.           /* <MDENTITY sets these:> */
  10. #define ESMD  2               /* String: Markup declaration. */
  11. #define ESMS  3               /* String: Marked section. */
  12. #define ESM   4               /* String: ordinary text. */
  13.                /* <ENTOPEN treats these specially:> */
  14. #define ESS   5               /* ETD: Start-tag. */
  15. #define ESE   6               /* ETD: End-tag. */
  16. #define ESI   7               /* String: PI. */
  17. #define ESX   8               /* String: SDATA general entity. */
  18. #define ESC   9               /* String: CDATA general entity. */
  19.           /* </MDENTITY> <MDEXTID sets these:> */
  20. #define ESFM 10               /* LPU: minimum external (file) storage class. */
  21. #define ESN  10               /* XCB: N/C/SDATA or SUBDOC control block. */
  22.                /* </ENTOPEN> */
  23. #define ESF  11               /* LPU: General entity. */
  24. #define ESP  12               /* LPU: Parameter entity. */
  25. #define ESD  13               /* LPU: Document type definition. */
  26. #define ESL  14               /* LPU: Link process definition. */
  27. #define ESK  15               /* LPU: Data content notation. */
  28.                       /* </MDEXTID> */
  29.  
  30. union etext {                 /* Entity text. */
  31.      UNIV x;                  /* External ID generated by system. */
  32.      UNCH *c;                 /* Character string. */
  33.      struct etd *e;           /* ETD for STAG or ETAG. */
  34.      struct ne *n;            /* N/C/SDATA or SUBDOC entity control block. */
  35. };
  36. #define ETEXTSZ sizeof(union etext)
  37. struct entity {               /* Entity control block. */
  38.      /*lin  -e18                 Suppress duplicate definition msg. */
  39.      struct entity *enext;    /* Next entity in chain. */
  40.      UNCH ename[NAMELEN+2];   /* Entity name with length and EOS. */
  41.      /*lin  +e18                 Restore duplicate definition msg. */
  42.      UNCH estore;             /* Storage class (see values above). */
  43.      union etext etx;         /* Entity text. */
  44. };
  45. #define ENTSZ sizeof(struct entity)
  46. typedef struct entity *PECB;  /* Ptr to entity control block. */
  47. typedef struct entity **TECB; /* Table of entity control blocks. */
  48.  
  49. struct source {               /* Source control block. */
  50.      struct entity ecb;       /* Entity control block. */
  51.      unsigned rcnt;           /* Source record number. */
  52.      int ccnt;                /* Source record chars since last RS. */
  53.      unsigned curoff;         /* Offset of curchar (chars read in this block).*/
  54.      UNCH curchar;            /* Current character. */
  55.      UNIV fcb;                /* SGMLIO fcb ptr returned by OPEN. */
  56.      UNCH *fbuf;              /* 1st char in buffer (0=PEND) or entity text. */
  57.      UNCH *fpos;              /* Current char in buffer or entity text. */
  58. };
  59. #define SCBSZ sizeof(struct source)
  60. typedef struct source *PSCB;  /* Ptr to source control block. */
  61.  
  62. /* Member definitions for source and entity control blocks.
  63.    The symbol SCB must be defined as a source control block pointer
  64.    before including this file; e.g., #define SCB scbs[es]
  65. */
  66. #define ECB     SCB.ecb       /* Pointer to current entity control block. */
  67. #define FBUF    SCB.fbuf      /* Pointer to start of entity buffer. */
  68. #define FPOS    SCB.fpos      /* Pointer to current char of current source. */
  69. #define RSCC    SCB.ccnt      /* CCNT at start of block (across EOB/EOS/EOF). */
  70. #define CCO     SCB.curoff    /* Offset in read buffer of current char. */
  71. #define CC      SCB.curchar   /* Current character of current source entity. */
  72. #define CCNT   (SCB.ccnt+CCO) /* Position of CC in current record (RS=0). */
  73. #define RCNT    SCB.rcnt      /* Position of record in entity (origin=1). */
  74. #define SCBFCB  SCB.fcb       /* Current file control block (if FILESW). */
  75. #define ECBPTR ((ECB.enext))  /* Pointer to this entity's ECB. */
  76. #define ENTITY ((ECB.ename))  /* Current entity name. */
  77. #define FILESW (ECB.estore>=ESFM) /* 1=Entity is external file; 0=internal. */
  78. #define NEWCC     (++FPOS)    /* Get next current character. */
  79. #define REPEATCC  (--FPOS)    /* Repeat previous current character. */
  80.  
  81. struct srh {                  /* Short reference map header. */
  82.      /*lint -e18                 Suppress duplicate definition msg. */
  83.      struct srh *enext;       /* Next short reference map in chain. */
  84.      UNCH ename[NAMELEN+2];   /* Entity name followed by EOS. */
  85.      /*lint +e18                 Restore duplicate definition msg. */
  86.      TECB srhsrm;             /* Ptr to short reference map. */
  87. };
  88. #define SRHSZ sizeof(struct srh)
  89. typedef struct srh *PSRH;     /* Ptr to short reference map header. */
  90. #define SRMNULL ((TECB)1)     /* Dummy ptr to empty short reference map. */
  91.  
  92. /* Definitions for ENTOPEN/ENTREF return codes.
  93. */
  94. #define ENTUNDEF -1           /* Callers of ENTOPEN: entity undefined. */
  95. #define ENTLOOP  -2           /* ENTOPEN: endless loop entity. */
  96. #define ENTMAX   -3           /* ENTOPEN: too many open entities. */
  97. #define ENTFILE  -4           /* ENTOPEN: file I/O error. */
  98. #define ENTSGI   -5           /* ENTOPEN: STARTGI entity. */
  99. #define ENTEGI   -6           /* ENTOPEN: ENDGI entity. */
  100. #define ENTDATA  -7           /* ENTOPEN: CDATA or SDATA entity. */
  101. #define ENTPI    -8           /* ENTOPEN: PI entity. */
  102.  
  103. /* Definitions for ENTDATA switches set in contersw.
  104. */
  105. #define CDECONT   2           /* 0010 CDATA entity referenced. */
  106. #define SDECONT   4           /* 0100 SDATA entity referenced. */
  107. #define NDECONT   8           /* 1000 NDATA entity referenced. */
  108.  
  109. /* Definitions for manipulating signed source character counters.
  110. */
  111. #define CTRSET(CTR) (CTR = (int) -(FPOS+1-FBUF))  /* Init source char ctr. */
  112. #define CTRGET(CTR) (CTR + (int)  (FPOS+1-FBUF))  /* Read source char ctr. */
  113. /******************************************************************************/
  114.